package com.prim.background;

import java.util.HashMap;
import java.util.Map;

/**
 * 发布：public return 等
 * 逸出：1. 方法返回一个private对象（private不然外部对象访问）
 * 2. 还未完成初始化（构造函数没有完全执行完毕）就把对象提供给外界
 * 在构造函数中未初始化完毕就this赋值
 * 隐式逸出 -- 注册监听事件
 * 构造函数中运行线程
 */
public class MultiThreadError3 {
    private Map<String, Object> states;

    public MultiThreadError3() {
        states = new HashMap<>();
        states.put("1", "周一");
        states.put("2", "周二");
        states.put("3", "周三");
        states.put("4", "周四");
    }

    public Map<String, Object> getStates() {
        return states;
    }

    /**
     * 通过副本的方法解决 发布逸出
     *
     * @return
     */
    public Map<String, Object> getStatesImproved() {
        return new HashMap<>(states);
    }

    public static void main(String[] args) {
        MultiThreadError3 multiThreadError3 = new MultiThreadError3();
        System.out.println(multiThreadError3.getStatesImproved().get("1"));
        multiThreadError3.getStatesImproved().remove("1");
        System.out.println(multiThreadError3.getStatesImproved().get("1"));
    }
}
